//
//  LDStatusViewModel.swift
//  Weibo201655
//
//  Created by pro on 16/5/9.
//  Copyright © 2016年 LeeDan. All rights reserved.
//

import UIKit
import SDWebImage

class LDStatusViewModel: NSObject {

    //加载微博数据
    //since_id：若指定此参数，则返回ID比since_id大的微博（即比since_id时间晚的微博），默认为0。
    //max_id：  若指定此参数，则返回ID小于或等于max_id的微博，默认为0。
    class func loadStatusModels(since_id: Int, max_id: Int, statusCallBack: (statuses: [LDStatus]?, error: NSError?)->()) {
       
        LDNetWorkTool.sharedNetWorkTool().loadStatues(since_id, max_id: max_id) { (response, error) -> () in
            if error != nil {
                statusCallBack(statuses: nil, error: error)
                return
            }
            //字典转模型
            if let dictArr = response!["statuses"] as? [[String: AnyObject]] {
                var statusArrM = [LDStatus]()
                //遍历数组
                for dict in dictArr {
                    let status = LDStatus(dict: dict)
                    //添加到数组
                    statusArrM.append(status)
                }
                
                //回调给控制器
                //下载图片，并回调给控制器
                self.loadWebImages(statusArrM, callBack: statusCallBack)
                
            } else {
                statusCallBack(statuses: nil, error: nil)
            }
            
        }
    }
    /**
     下载图片
     - parameter statuses	微博模型数组
     - parameter callBack	下载图片后回调给控制器
     */
    private class func loadWebImages(statuses: [LDStatus], callBack: (statuses: [LDStatus]?, error: NSError?)->()) {
        
        //print("bundlePath: \(NSHomeDirectory())")
        
        //开启线程组
        let group = dispatch_group_create()
        
        //图片大小
        var imgLength = 0
        //遍历数组
        for status in statuses {
            
            //图片路径数组
            var picUrls = [NSURL]()
            //有没有微博图片
            if let pics = status.pictureUrls where pics.count > 0 {
                picUrls = pics
            }
            //有没有转发微博图片
            if let retweetPics = status.retweeted_status?.pictureUrls where retweetPics.count > 0 {
                picUrls = retweetPics
            }
            
            //如果没有图片，跳过此次循环体
            if picUrls.count <= 0 {
                break
            }
            
            //遍历图片数组
            for url in picUrls {
                //进入组
                dispatch_group_enter(group)
                //下载图片
                SDWebImageManager.sharedManager().downloadImageWithURL(url, options: SDWebImageOptions(rawValue: 0), progress: nil, completed: { (image, error, _, _, _) -> Void in
                    //离开组
                    dispatch_group_leave(group)
                    
                    //下载出错
                    if error != nil {
                        print("\(status.user?.screen_name)的图片下载失败： \(error)")
                        return//结束此次下载
                    }
                    
                    //计算图片大小
                    imgLength += (UIImagePNGRepresentation(image)?.length)!
                })
                
            }
        }
     
        //所有图片缓存完毕
        dispatch_group_notify(group, dispatch_get_main_queue()) { () -> Void in
            //print("下载图片总大小： \(CGFloat(imgLength) / 1024.0 / 1024.0)MB")
            callBack(statuses: statuses, error: nil)
        }
        
    }
}
